<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        const p1 = new Promise((resolve, reject) => {
      try {
        console.log("请求数据A")
        // throw new Error("A错误")
        setTimeout(() => {
          console.log("请求A结束....");
          resolve("A数据")
        }, 1500)
      } catch (e) {
        reject(e.message)
      }
    })

    const p2 = new Promise((resolve, reject) => {
      try {
        console.log("请求数据B")
        // throw new Error("B错误")
        setTimeout(() => {
          console.log("请求B结束....");
          resolve("B数据")
        }, 2500)
      } catch (e) {
        reject(e.message)
      }
    })


    const p3 = new Promise((resolve, reject) => {
      try {
        console.log("请求数据C")
        // throw new Error("C错误")
        setTimeout(() => {
          console.log("请求C结束....");
          resolve("C数据")
        }, 2000)
      } catch (e) {
        reject(e.message)
      }
    })

    /* 
      Promise.all方法:
        - 接受一个数组(原则上是iterable类型)作为参数
        - all方法默认返回pending状态的promise实例
        - 当所有的promise实例全部完成,返回fulfilled状态的实例,值为所有成功的值组成的数组
        - 当其中有一个promise实例执行失败,则all方法返回失败的promise实例,值是这个错误值
    */

    // const result = Promise.allSettlend([p1, p2, p3]);
    // console.log("result", result);
    // result.then(value => {
    //   console.log("全部完成");
    // }).catch(reason => {
    //   console.log("有错误的", reason);
    // })


    // const qdce = Promise.race([p1, p2, p3]);
    // console.log("qdce", qdce);
    // qdce.then(value => {
    //   console.log("全部完成");
    // }).catch(reason => {
    //   console.log("有错误的", reason);
    // })

    const qeedce = Promise.any([p1, p2, p3]);
    console.log("qdce", qeedce);
    qeedce.then(value => {
      console.log("全部完成");
    }).catch(reason => {
      console.log("有错误的", reason);
    })
</script>
</body>
</html>